package com.cskaoyan.javase.oop3._0abstract._0introduction._0old;
/**
 * 以下猫狗继承案例，是一个非常基础的继承语法的代码。思考一下Animal类的继承体系，有什么问题吗？
 * 从以下两个角度分析：
 * 从代码角度上，有没有冗余代码？
 *      动物的叫声,Animal类中的shout方法是没有被调用的.
 *      实际上,Animal类中shout方法就是纯粹为了被继承,被重写的,即便它没有方法体也没关系
 *
 * 从设计角度上，在这个案例中，会存在一个动物对象吗？
 *      没有,案例中不存在一个动物对象,它仅仅作为生成子类的一个父类而存在
 *      况且也没有一种动物就叫"动物",Animal更像一个抽象的概念
 *      抽象的概念应该不需要创建对象,抽象的概念的行为也不好描述
 *
 *  以上总结,我们可以改进这个案例,让:
 *      1.Animal类是抽象概念,不需要创建对象,仅作为父类而存在,作用就是生成子类
 *      2.Animal类中的shout方法没必要有方法体
 *  怎么做呢?
 *
 * @since 10:54
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}
class Animal {
    public void shout() {
        System.out.println("动物叫");
    }
}
class Cat extends Animal {
    @Override
    public void shout() {
        System.out.println("猫叫");
    }
}
class Dog extends Animal {
    @Override
    public void shout() {
        System.out.println("狗叫");
    }
}